rust关于生命周期: Mutex Fn

·
Table of Contents

遇到的问题

let mut b = SslConnector::builder(SslMethod::tls_client()).map_err(|e|e.to_string())?;
b.set_verify(SslVerifyMode::NONE);
if let Some(file) = &config.sshkeylogfile {
    let file = OpenOptions::new()
        .create(true)
        .append(true)
        .open(file)
        .map_err(|e|e.to_string())?;
    let file = Mutex::new(file);

    // 重点这里: 
    // 1. 即需要move将file的生命周期延长
    // 2. 又需要file.lock().unwrap() 这样使用捕获的变量, 这样才能多次调用
    // 可以理解为 struct Fn { file: TFile }, Fn 结构通过move保存了值类型file, 同时使用Mutex保证了内部可变性???
    b.set_keylog_callback(move |_ssl, str| {
        // let file = file; // 这样调用一次就消耗了file,不能多次调用这个回调
        let mut file = file.lock().unwrap();
        let _ = file.write_all(str.as_bytes());
        let _ = file.write_all(b"\n");
    });
}